/*同步*/
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>

sem_t sem_h,sem_w;

/*共享资源：pr_char函数*/
void pr_char(char *str)
{
	while (*str) 
	{
		putchar(*str);
		fflush(stdout);
		str++;
		usleep(300000); //300ms
	}
}

void* thread1(void* arg)
{
	char *s1 = "hello\n";
	sem_wait(&sem_h);//P(sem_h)
	pr_char(s1);
	sem_post(&sem_w);//V(sem_w)

	return NULL;
}

void* thread2(void* arg)
{
	char *s2 = "world\n";
	sem_wait(&sem_w);//P(sem_w)
	pr_char(s2);
	sem_post(&sem_h);//V(sem_h)

	return NULL;
}

int main()
{
	pthread_t tid1,tid2;

	/*初始化信号量*/
	sem_init(&sem_h,0,1);
	sem_init(&sem_w,0,0);
	
	/*创建线程1、2*/
	pthread_create(&tid1,NULL,thread1,NULL);
	pthread_create(&tid2,NULL,thread2,NULL);
	
	/*等待线程1、2结束并回收*/
	pthread_join(tid1, NULL);
	pthread_join(tid2, NULL);

	/*销毁信号量*/
	sem_destroy(&sem_h);
	sem_destroy(&sem_w);

	return 0;
}

